home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / beans / EventHandler.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  5.2 KB  |  167 lines

  1. package java.beans;
  2.  
  3. import java.lang.reflect.InvocationHandler;
  4. import java.lang.reflect.InvocationTargetException;
  5. import java.lang.reflect.Method;
  6. import java.lang.reflect.Proxy;
  7. import java.security.AccessControlContext;
  8. import java.security.AccessController;
  9. import sun.reflect.misc.MethodUtil;
  10.  
  11. public class EventHandler implements InvocationHandler {
  12.    private Object target;
  13.    private String action;
  14.    private String eventPropertyName;
  15.    private String listenerMethodName;
  16.    private AccessControlContext acc = AccessController.getContext();
  17.  
  18.    public EventHandler(Object var1, String var2, String var3, String var4) {
  19.       this.target = var1;
  20.       this.action = var2;
  21.       if (var1 == null) {
  22.          throw new NullPointerException("target must be non-null");
  23.       } else if (var2 == null) {
  24.          throw new NullPointerException("action must be non-null");
  25.       } else {
  26.          this.eventPropertyName = var3;
  27.          this.listenerMethodName = var4;
  28.       }
  29.    }
  30.  
  31.    public Object getTarget() {
  32.       return this.target;
  33.    }
  34.  
  35.    public String getAction() {
  36.       return this.action;
  37.    }
  38.  
  39.    public String getEventPropertyName() {
  40.       return this.eventPropertyName;
  41.    }
  42.  
  43.    public String getListenerMethodName() {
  44.       return this.listenerMethodName;
  45.    }
  46.  
  47.    private Object applyGetters(Object var1, String var2) {
  48.       if (var2 != null && !var2.equals("")) {
  49.          int var3 = var2.indexOf(46);
  50.          if (var3 == -1) {
  51.             var3 = var2.length();
  52.          }
  53.  
  54.          String var4 = var2.substring(0, var3);
  55.          String var5 = var2.substring(Math.min(var3 + 1, var2.length()));
  56.  
  57.          try {
  58.             Method var6 = null;
  59.             if (var1 != null) {
  60.                var6 = ReflectionUtils.getMethod(var1.getClass(), "get" + NameGenerator.capitalize(var4), new Class[0]);
  61.                if (var6 == null) {
  62.                   var6 = ReflectionUtils.getMethod(var1.getClass(), "is" + NameGenerator.capitalize(var4), new Class[0]);
  63.                }
  64.  
  65.                if (var6 == null) {
  66.                   var6 = ReflectionUtils.getMethod(var1.getClass(), var4, new Class[0]);
  67.                }
  68.             }
  69.  
  70.             if (var6 == null) {
  71.                throw new RuntimeException("No method called: " + var4 + " defined on " + var1);
  72.             } else {
  73.                Object var7 = MethodUtil.invoke(var6, var1, new Object[0]);
  74.                return this.applyGetters(var7, var5);
  75.             }
  76.          } catch (Throwable var8) {
  77.             throw new RuntimeException("Failed to call method: " + var4 + " on " + var1, var8);
  78.          }
  79.       } else {
  80.          return var1;
  81.       }
  82.    }
  83.  
  84.    public Object invoke(Object var1, Method var2, Object[] var3) {
  85.       return AccessController.doPrivileged(new 1(this, var1, var2, var3), this.acc);
  86.    }
  87.  
  88.    private Object invokeInternal(Object var1, Method var2, Object[] var3) {
  89.       String var4 = var2.getName();
  90.       if (var2.getDeclaringClass() == Object.class) {
  91.          if (var4.equals("hashCode")) {
  92.             return new Integer(System.identityHashCode(var1));
  93.          }
  94.  
  95.          if (var4.equals("equals")) {
  96.             return var1 == var3[0] ? Boolean.TRUE : Boolean.FALSE;
  97.          }
  98.  
  99.          if (var4.equals("toString")) {
  100.             return var1.getClass().getName() + '@' + Integer.toHexString(var1.hashCode());
  101.          }
  102.       }
  103.  
  104.       if (this.listenerMethodName != null && !this.listenerMethodName.equals(var4)) {
  105.          return null;
  106.       } else {
  107.          Object var5 = null;
  108.          Object var6 = null;
  109.          Class[] var12;
  110.          if (this.eventPropertyName == null) {
  111.             var6 = new Object[0];
  112.             var12 = new Class[0];
  113.          } else {
  114.             Object var7 = this.applyGetters(var3[0], this.getEventPropertyName());
  115.             var6 = new Object[]{var7};
  116.             var12 = new Class[]{var7 == null ? null : var7.getClass()};
  117.          }
  118.  
  119.          try {
  120.             int var14 = this.action.lastIndexOf(46);
  121.             if (var14 != -1) {
  122.                this.target = this.applyGetters(this.target, this.action.substring(0, var14));
  123.                this.action = this.action.substring(var14 + 1);
  124.             }
  125.  
  126.             Method var8 = ReflectionUtils.getMethod(this.target.getClass(), this.action, var12);
  127.             if (var8 == null) {
  128.                var8 = ReflectionUtils.getMethod(this.target.getClass(), "set" + NameGenerator.capitalize(this.action), var12);
  129.             }
  130.  
  131.             if (var8 == null) {
  132.                String var9 = var12.length == 0 ? " with no arguments" : " with argument " + var12[0];
  133.                throw new RuntimeException("No method called " + this.action + " on " + this.target.getClass() + var9);
  134.             } else {
  135.                return MethodUtil.invoke(var8, this.target, (Object[])var6);
  136.             }
  137.          } catch (IllegalAccessException var10) {
  138.             throw new RuntimeException(var10);
  139.          } catch (InvocationTargetException var11) {
  140.             throw new RuntimeException(var11.getTargetException());
  141.          }
  142.       }
  143.    }
  144.  
  145.    public static <T> T create(Class<T> var0, Object var1, String var2) {
  146.       return (T)create(var0, var1, var2, (String)null, (String)null);
  147.    }
  148.  
  149.    public static <T> T create(Class<T> var0, Object var1, String var2, String var3) {
  150.       return (T)create(var0, var1, var2, var3, (String)null);
  151.    }
  152.  
  153.    public static <T> T create(Class<T> var0, Object var1, String var2, String var3, String var4) {
  154.       EventHandler var5 = new EventHandler(var1, var2, var3, var4);
  155.       if (var0 == null) {
  156.          throw new NullPointerException("listenerInterface must be non-null");
  157.       } else {
  158.          return (T)Proxy.newProxyInstance(var1.getClass().getClassLoader(), new Class[]{var0}, var5);
  159.       }
  160.    }
  161.  
  162.    // $FF: synthetic method
  163.    static Object access$000(EventHandler var0, Object var1, Method var2, Object[] var3) {
  164.       return var0.invokeInternal(var1, var2, var3);
  165.    }
  166. }
  167.